Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attempt to fix DuplicateAndClose_TcpServerHandler flaky test #103161

Merged
merged 6 commits into from
Jun 12, 2024

Conversation

rokonec
Copy link
Contributor

@rokonec rokonec commented Jun 7, 2024

Context:
We have noticed failure of DuplicateAndClose_TcpServerHandler test in Job https://dev.azure.com/dnceng-public/public/_build/results?buildId=696224&view=logs&j=cb76e204-ba8f-557d-eba6-9896b4f24865

Changes made (changes are isolated into commits for easier review/revert):
Ensure RemoteInvokeHandle is disposed - this is ensuring that Dispose of RemoteInvokeHandle will be called during test run, otherwise it would be called in Finalize and as it throws, it would shutdown whole xunit runner.

Make RunCommonHostLogic synchronous - after discussion with original author we decide reverting RunCommonHostLogic back to synchronous execution for simplicity reasons.

Document RemoteInvokeHandle DisposeAsync intent.

Replace namedpipe IPC by Socket IPC - as there is theory that namedpipe implementatation is root cause of this flakiness, I have decided to rule it our by replacing it by simple Socket based IPC. IPC is required because remote code has to start before socket is disconnect, as socket disconnection requires process ID of the other process.

Testing:
locally by unit tests

Copy link
Contributor

Tagging subscribers to this area: @dotnet/ncl
See info in area-owners.md if you want to be subscribed.

@rokonec
Copy link
Contributor Author

rokonec commented Jun 7, 2024

Related failure log snapshot:

C:\h\w\BB30097A\w\B2DF096E\e>"C:\h\w\BB30097A\p\dotnet.exe" exec --runtimeconfig System.Net.Sockets.Tests.runtimeconfig.json --depsfile System.Net.Sockets.Tests.deps.json xunit.console.dll System.Net.Sockets.Tests.dll -xml testResults.xml -nologo -nocolor -notrait category=IgnoreForCI -notrait category=OuterLoop -notrait category=failing  
  Discovering: System.Net.Sockets.Tests (method display = ClassAndMethod, method display options = None)
  Discovered:  System.Net.Sockets.Tests (found 1527 of 1819 test cases)
  Starting:    System.Net.Sockets.Tests (parallel test collections = on [2 threads], stop on fail = off)
    System.Net.Sockets.Tests.KeepAliveTest.Socket_KeepAlive_RetryCount_Failure [SKIP]
      Condition(s) not met: "IsWindowsBelow1703"
    System.Net.Sockets.Tests.UnixDomainSocketTest.Socket_CreateUnixDomainSocket_Throws_OnWindows [SKIP]
      Condition(s) not met: "IsSubWindows10"
Process terminated.     System.Net.Sockets.Tests.SocketDuplicationTests+Synchronous.DuplicateAndClose_TcpServerHandler(addressFamily: InterNetworkV6, sameProcess: False) [FAIL]
      System.Net.Sockets.SocketException : A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied.
      Stack Trace:
        /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs(1175,0): at System.Net.Sockets.Socket.Send(ReadOnlySpan`1 buffer, SocketFlags socketFlags)
        /_/src/libraries/System.Net.Sockets/src/System/Net/Sockets/Socket.cs(1170,0): at System.Net.Sockets.Socket.Send(ReadOnlySpan`1 buffer)
        /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs(348,0): at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.<>c__DisplayClass5_0.<<DuplicateAndClose_TcpServerHandler>g__RunCommonHostLogic|0>d.MoveNext()
        --- End of stack trace from previous location ---
        /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs(333,0): at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.DuplicateAndClose_TcpServerHandler(AddressFamily addressFamily, Boolean sameProcess)
        /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs(335,0): at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.DuplicateAndClose_TcpServerHandler(AddressFamily addressFamily, Boolean sameProcess)
        --- End of stack trace from previous location ---
UnhandledException
   at System.Environment.FailFast(System.Runtime.CompilerServices.StackCrawlMarkHandle, System.String, System.Runtime.CompilerServices.ObjectHandleOnStack, System.String)
   at System.Environment.FailFast(System.Threading.StackCrawlMark ByRef, System.String, System.Exception, System.String)
   at System.Environment.FailFast(System.String)
   at System.Runtime.EH.FallbackFailFast(System.Runtime.RhFailFastReason, System.Object)
   at System.Runtime.EH.UnhandledExceptionFailFastViaClasslib(System.Runtime.RhFailFastReason, System.Object, IntPtr, ExInfo ByRef)
   at System.Runtime.EH.DispatchEx(System.Runtime.StackFrameIterator ByRef, ExInfo ByRef)
   at System.Runtime.EH.RhThrowEx(System.Object, ExInfo ByRef)
   at Microsoft.DotNet.RemoteExecutor.RemoteInvokeHandle.Dispose(Boolean)
   at Microsoft.DotNet.RemoteExecutor.RemoteInvokeHandle.Finalize()
Unhandled exception. Xunit.Sdk.EqualException: Assert.Equal() Failure: Strings differ
           � (pos 0)
Expected: "test123!"
Actual:   ""
   at Xunit.Assert.Equal(ReadOnlySpan`1 expectedSpan, ReadOnlySpan`1 actualSpan, Boolean ignoreCase, Boolean ignoreLineEndingDifferences, Boolean ignoreWhiteSpaceDifferences, Boolean ignoreAllWhiteSpace) in /_/src/Microsoft.DotNet.XUnitAssert/src/SpanAsserts.cs:line 658
   at Xunit.Assert.Equal(String expected, String actual, Boolean ignoreCase, Boolean ignoreLineEndingDifferences, Boolean ignoreWhiteSpaceDifferences, Boolean ignoreAllWhiteSpace) in /_/src/Microsoft.DotNet.XUnitAssert/src/StringAsserts.cs:line 333
   at Xunit.Assert.Equal(String expected, String actual) in /_/src/Microsoft.DotNet.XUnitAssert/src/StringAsserts.cs:line 302
   at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.<DuplicateAndClose_TcpServerHandler>g__HandlerServerCode|5_1(String ipcPipeName) in /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs:line 369
   at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.<DuplicateAndClose_TcpServerHandler>g__HandlerServerCode|5_1(String ipcPipeName) in /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs:line 371
   at Microsoft.DotNet.RemoteExecutor.Program.Main(String[] args) in /_/src/Microsoft.DotNet.RemoteExecutor/src/Program.cs:line 61
--- End of stack trace from previous location ---
   at Microsoft.DotNet.RemoteExecutor.Program.Main(String[] args) in /_/src/Microsoft.DotNet.RemoteExecutor/src/Program.cs:line 97
----- end Mon 06/03/2024 21:26:18.67 ----- exit code -2146232797 ----------------------------------------------------------
----- start ===============  XUnitLogChecker Output =====================================================
C:\h\w\BB30097A\p\dotnet.exe --roll-forward Major C:\h\w\BB30097A\p\XUnitLogChecker.dll --dumps-path C:\cores
Unhandled exception. System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
   at System.IO.Stream.ReadAtLeastCore(Span`1 buffer, Int32 minimumBytes, Boolean throwOnEndOfStream) in /_/src/libraries/System.Private.CoreLib/src/System/IO/Stream.cs:line 906
   at System.IO.BinaryReader.InternalRead(Span`1 buffer) in /_/src/libraries/System.Private.CoreLib/src/System/IO/BinaryReader.cs:line 470
   at System.IO.BinaryReader.ReadInt32() in /_/src/libraries/System.Private.CoreLib/src/System/IO/BinaryReader.cs:line 219
   at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.ReadSocketInfo(Stream stream) in /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs:line 281
   at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.<DuplicateAndClose_TcpServerHandler>g__HandlerServerCode|5_1(String ipcPipeName) in /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs:line 357
   at System.Net.Sockets.Tests.SocketDuplicationTests.PolymorphicTests`1.<DuplicateAndClose_TcpServerHandler>g__HandlerServerCode|5_1(String ipcPipeName) in /_/src/libraries/System.Net.Sockets/tests/FunctionalTests/SocketDuplicationTests.cs:line 371
   at Microsoft.DotNet.RemoteExecutor.Program.Main(String[] args) in /_/src/Microsoft.DotNet.RemoteExecutor/src/Program.cs:line 61
--- End of stack trace from previous location ---
   at Microsoft.DotNet.RemoteExecutor.Program.Main(String[] args) in /_/src/Microsoft.DotNet.RemoteExecutor/src/Program.cs:line 97
[XUnitLogChecker]: 21:26:19.09: Only dumps checking will be done.

Copy link
Member

@wfurt wfurt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@wfurt
Copy link
Member

wfurt commented Jun 7, 2024

/azp run runtime-libraries-coreclr outerloop

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@rokonec
Copy link
Contributor Author

rokonec commented Jun 11, 2024

/azp run runtime-libraries-coreclr outerloop

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@rokonec
Copy link
Contributor Author

rokonec commented Jun 11, 2024

/azp run

Copy link

You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@rokonec rokonec closed this Jun 12, 2024
@rokonec rokonec reopened this Jun 12, 2024
@rokonec
Copy link
Contributor Author

rokonec commented Jun 12, 2024

/ba-g After careful review I am quite sure failing tests are not related to changes of this PR

@rokonec rokonec merged commit 85a70c4 into dotnet:main Jun 12, 2024
81 of 91 checks passed
@karelz karelz added this to the 9.0.0 milestone Jun 24, 2024
@github-actions github-actions bot locked and limited conversation to collaborators Jul 25, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants